/*
  Based on TextFinder from TextEdit application. Original copyright:
  --------------------------------------------------------------------
  Copyright (c) 1995-1996, NeXT Software, Inc.
  All rights reserved.
  Author: Ali Ozer

  You may freely copy, distribute and reuse the code in this example.
  NeXT disclaims any warranty of any kind, expressed or implied,
  as to its fitness for any particular use.
  --------------------------------------------------------------------

  Find and replace functionality with a minimal panel...

  In addition to including this class and FindPanel.nib in your app, you
  probably need to hook up the following action methods in your document
  object (or whatever object is first responder) to call the appropriate
  methods in [TextFinder sharedInstance]:

  orderFrontFindPanel:
  findNext:
  findPrevious:
  enterSelection: (calls setFindString:)
*/
#import <Foundation/Foundation.h>

#define Forward YES
#define Backward NO

@class NSPanel;

@interface TerminalFinder : NSObject
{
  id findPanel;
  id findTextField;
  id ignoreCaseButton;
  id findNextButton;
  id statusField;

  NSString *findString;
  BOOL findStringChangedSinceLastPasteboardUpdate;
  BOOL lastFindWasSuccessful; /* A bit of a kludge */
}

/* Common way to get a text finder.
   One instance of TextFinder per app is good enough. */
+ (id)sharedInstance;

/* Main method for external users; does a find in the first responder.
   Selects found range or beeps. */
- (BOOL)find:(BOOL)direction;

/* Loads UI lazily */
- (NSPanel *)findPanel;

/* Gets the first responder and returns it if it's an NSTextView */
// - (NSTextView *)textObjectToSearchIn;

/* Get/set the current find string. Will update UI if UI is loaded */
- (NSString *)findString;
- (void)setFindString:(NSString *)string;

/* Misc internal methods */
- (void)appDidActivate:(NSNotification *)notification;
- (void)addWillDeactivate:(NSNotification *)notification;
- (void)loadFindStringFromPasteboard;
- (void)loadFindStringToPasteboard;

/* Methods sent from the find panel UI */
- (void)findNext:(id)sender;
- (void)findPrevious:(id)sender;
- (void)findNextAndOrderFindPanelOut:(id)sender;
- (void)orderFrontFindPanel:(id)sender;

@end

@interface NSString (NSStringTextFinding)

- (NSRange)findString:(NSString *)string
        selectedRange:(NSRange)selectedRange
              options:(unsigned)mask
                 wrap:(BOOL)wrapFlag;

@end
